小编Oct*_*ron的帖子

使用mediacodec进行PCM到AAC的转换

我在Android(Jelly Bean)中使用媒体编解码器类将PCM格式编码为AAC.该文件已编码,但没有音乐播放器能够播放该文件.我无法在网上找到任何工作代码或适当的文档.

这是我的代码:

public void doConvert()
{

    new AsyncTask<Void, Void, Void>()
    {

        @Override
        protected Void doInBackground(Void... params) 
        {
            try
            {
                int codecCount = MediaCodecList.getCodecCount();

                for ( int i=0; i < codecCount; i++)
                {
                    MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);
                    Logger.getLogger(MainActivity.class.getSimpleName()).log(Level.INFO, info.getName());
                    for ( String type : info.getSupportedTypes() )
                    {
                        Logger.getLogger(MainActivity.class.getSimpleName()).log(Level.INFO, type);
                    }

                }

                File inputFile = new File( Environment.getExternalStorageDirectory().getAbsolutePath()+"/Download/Ghajini27_Mono_8Khz.wav");
                //File inputFile = new File( sampleFD.get);
                Log.e("File", String.valueOf(inputFile.length()));
                FileInputStream fis = new FileInputStream(inputFile);
                fis.skip(44);//remove wav header

                File outputFile = new File( Environment.getExternalStorageDirectory().getAbsolutePath()+"/Download/out.m4a");
                if …
Run Code Online (Sandbox Code Playgroud)

android aac pcm

22
推荐指数
2
解决办法
8894
查看次数

什么是"覆盖等价",它与@Override有什么关系?

的Javadoc@Override注释,我遇到了以下规则:

如果使用此批注类型对方法进行批注,则编译器需要生成错误消息,除非至少满足下列条件之一:

  • 该方法会覆盖或实现在超类型中声明的方法.
  • 该方法的签名覆盖等效于Object中声明的任何公共方法.

我对第一点很清楚,但我不确定第二点.

"覆盖等价"是什么意思?Object在这方面,公共方法有何特别之处?为什么这不属于第一个标准?

更新说明:这仅适用于Java 7文档.在Java 6的文档不说的覆盖等价什么.为什么要改变?


更新:

在咨询了JLS(第8.4.2节)之后,我发现了以下对覆盖等价的解释:

的方法的签名m1是一个子签名的方法的签名m2,如果任一:

  • m2具有相同的签名m1,或
  • 签名与签名m1的擦除(§4.6)相同m2.

两个方法签名m1并且m2覆盖等效的,如果它们m1是子签名m2或是m2其子签名m1.

据我所知,这回答了第一个问题("它是什么意思?")和第三个问题("为什么第一个条件不包括这个?").

如果我理解正确(如果我没有请通知我!),只有一种情况,两种方法是覆盖等价的,并且不属于原始问题的第一个条件.当子类方法的签名的擦除与超类方法的签名相同时,情况就是这种情况,而不是相反.

因此,当我们在尝试"覆盖"类的公共方法时尝试添加类型参数时,原始问题的第二个条件才会发挥作用Object.我尝试了以下简单示例来测试它,使用未使用的类型参数:

public class Foo {
    @Override
    public <T> boolean equals(Object obj) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,这个类没有编译,因为该方法不实际 …

java overriding annotations language-design method-signature

16
推荐指数
2
解决办法
1614
查看次数

android,background,layer-list和可伸缩位图项

我有以下drawable set作为背景:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">

<item>
  <bitmap android:src="@drawable/base_bg"
    android:gravity="bottom" />
</item>
<item android:top="10dp" android:left="10dp">
  <bitmap android:src="@drawable/decoration1"
    android:gravity="top|right" 
    android:width="25dp" 
    android:height="25dp"  />
</item>
<item android:top="10dp" android:left="10dp">
  <bitmap android:src="@drawable/decoration2"
    android:gravity="top|right" 
    android:width="25dp" 
    android:height="25dp" 
    />
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

它显示所有位图(base_bg,decoration1decoration2),但我找不到修改它们大小的方法.我想拥有主要背景,并在其上面根据dpi具有不同尺寸的装饰.有没有一种简单的方法可以做到这一点,或者我真的必须为不同的dpi有一堆"装饰"?这不好,我想改为scale/resize选项!

android:widthandroid:height属性的东西,我想了解,但我知道,这是行不通的.目前我正在为不同的DPI使用不同的版本,但希望它可以更加用户友好.

android background bitmap layer-list

15
推荐指数
1
解决办法
3万
查看次数

如何使用fabric.js在画布上绘制一条线

我正在使用fabric.js在画布上画一条线.这是我的代码,但我没有得到任何输出:

$("#Line").click(function() {
    // alert("Line");
    canvas.add(new fabric.Line([50, 100, 200, 200], {
        left: 170,
        top: 150,
        fill: 'red'
    }));
});
Run Code Online (Sandbox Code Playgroud)

jquery html5-canvas fabricjs

13
推荐指数
1
解决办法
2万
查看次数

访问VBA - 如何在VBA中有一个允许我循环访问控件名称的循环

我在表单上有大约10个文本框,实际上用于显示而不是输入.它们被命名为txt_001_Name,txt_002_Title等等.为此使用了什么样的循环.

我应该使用什么样的VBA来实际循环文本框的名称?所以,如果我是debug.print,它看起来像:

txt_001_Title
txt_002_Title
txt_003_Title
Run Code Online (Sandbox Code Playgroud)

这可能很简单 - 我应该学习的原因更多!

编辑:对不起,我应该对此更具描述性.

由于上面的命名约定,我希望迭代这些文本框,以便我可以执行每个文本框.这10个文本框中实际表示的是数值,每个文本框在onload事件中都有一个SQL语句.我还有另一组十个包含更静态的数值,最后另一个十个使用表达式简单地将前十个中的每一个除以相对的"第二"十,并且该值最终在相对中所以基本上它看起来像仪表板.

'first ten'       'second ten'     'resulting ten'
---------------------------------------------------
txt_001_value      txt_001_calc     txt_001_result
txt_002_value      txt_002_calc     txt_002_result
Run Code Online (Sandbox Code Playgroud)

等等

所以我实际上想将它用于'结果'文本框.我想循环前十,并执行这个简单的计算:

 me.txt_001_result = me.txt_001_value / me.txt_001_calc     
Run Code Online (Sandbox Code Playgroud)

所有的命名约定"匹配",所以我可以为此手动输入上面的10行,但我确信有更好的方法(循环这个),我应该学习它.

ms-access vba loops access-vba

7
推荐指数
1
解决办法
3万
查看次数

如何在java中调用抽象类方法

我想在我自己的类中调用抽象类的方法.抽象类是:

public abstract class Call {

    public Connection getEarliestConnection() {
         Connection earliest = null;

         ...

         return earliest;
    }    
} 
Run Code Online (Sandbox Code Playgroud)

我想调用上面的方法,调用类是:

public class MyActivity extends Activity {

    Connection c = new Connection();

    private void getCallFailedString(Call cal)
    {
        c = cal.getEarliestConnection();

        if (c == null) {
            System.out.println("** no connection**");
        } else {
            System.out.println("** connection");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行上面的类时,它就会在行上抛出NullPointerException c = cal.getEarliestConnection().谁能告诉我如何解决这个问题?

java abstract-class

7
推荐指数
1
解决办法
5万
查看次数

在servlet中使用java.util.Timer是否安全?

由于许多原因,在servlet中使用线程并不是一个好习惯.

java.util.Timer好像是一个线程的包装器.那么,使用它也不安全吗?如果是这样,在servlet中安排任务的最安全的方法是什么?

java multithreading servlets scheduling timer

6
推荐指数
1
解决办法
6229
查看次数

以编程方式声明常用方法的变量(不使用数组)

我只是学习Java,但我的问题是Java相关和一般.

我的情况是这样的:我有一个方法,我想通过继承通常由几个类使用.在方法块中,我需要声明一个调用类的变量,从中创建对象,这些对象位于调用类的ArrayList <>("array")中,并通过ObjectOutputStream("output")发送输出到序列化文件.

我有以下课程:

CustomerInternalFrame.java,它使用Customer类型的ArrayList维护序列化Customer.java的"数组".

ContractorInternalFrame.java,它使用类型为Contractor的ArrayList维护序列化Contractor.java的"数组".

VendorInternalFrame.java,它使用Vendor类型的ArrayList维护序列化Vendor.java的"数组".

在每个这些InternalFrame类中,我有以下方法addRecords(将"Customer"替换为相应的类,Customer,Contractor或Vendor):

private void addRecords() {

  // object to be written to the file
  Customer record;

  // loop until end of array
  for (Customer element : array) {

     // check for closed streamer and invalid entries
     try {

        // create a new object from current fields
        record = new Customer(
           element.getName(),
           element.getLastName(),
           element.getAddress1(),
           element.getAddress2(),
           element.getCity(),
           element.getState(),
           element.getZip(),
           element.getPhone(),
           element.getCell());

        // write new record
        output.writeObject(record);
     } // end try
     ... (catch blocks)
   } // end …
Run Code Online (Sandbox Code Playgroud)

java variables class

1
推荐指数
1
解决办法
707
查看次数

Java:如何按降序排序数组?

所以我创建了一个简单的程序,要求用户输入5种类型,然后从10中得分.我没有添加任何验证,但我并不担心.如您所见,我有两个数组:genres[]score[].让我们说他们进入:

        [1] : Genre A | 3
        [2] : Genre B | 6
        [3] : Genre C | 2
        [4] : Genre D | 10
        [5] : Genre E | 8
Run Code Online (Sandbox Code Playgroud)

结果应列出流派D,E,B,A,C

这是我的整体代码:

import java.util.Scanner;

class OrigClass {
    public static void main (String[] args){
        Scanner ScanObj = new Scanner(System.in);
        int count;
        String[] genres;
        genres = new String[5];
        int[] score;
        score = new int[5];
        for (count = 0; count < 5;count++){
            System.out.println("Enter A Genre: ");
            genres[count] = …
Run Code Online (Sandbox Code Playgroud)

java arrays sorting

1
推荐指数
1
解决办法
4304
查看次数

为什么不编译?

为什么这个班不编译?

import java.util.*;

public class Caesar
{
    public static void main(String [] args)
    {
        final boolean DEBUG = false;
        System.out.println("Welcome to the Caesar Cypher");
        System.out.println("----------------------------");
        Scanner keyboard = new Scanner (System.in);
        System.out.print("Enter a String : ");
        String plainText = keyboard.nextLine();
        System.out.print("Enter an offset: ");
        int offset = keyboard.nextInt();
        String cipherText = "";
        for(int i=0;i<plainText.length();i++)
        {
            int chVal = plainText.charAt(i);

            if (DEBUG) {int debugchVal = chVal;}

            chVal +=offset;

            if (DEBUG) {System.out.print(chVal + "\t");}

            while (chVal <32 || chVal > 127)
            { …
Run Code Online (Sandbox Code Playgroud)

java

-2
推荐指数
3
解决办法
311
查看次数