私はAsynctaskを使用して、autocompletetextviewでサーバーからリストを取得していますが、強制的に閉じています。私のコードは次のとおりです。
public class Aixclass extends Activity
{
protected Void[] params1;
String[] strarray;
TextView myXmlContent;
AutoCompleteTextView actv;
static final String URL="http://cympac.com/apps/xmlfile.xml";
static final String KEY_COMMAND = "command"; // parent node
static final String KEY_WORD = "word";
static final String KEY_EXPLANATION = "explanation";
String stringXmlContent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newaix);
TextView tv1=(TextView)findViewById(R.id.textView1);
TextView tv2=(TextView)findViewById(R.id.textView2);
TextView tv4=(TextView)findViewById(R.id.textView4);
//TextView tv5=(TextView)findViewById(R.id.textView5);
String text="Cympac Software Solutions Pvt Ltd. www.cympac.com";
tv4.setText(text);
tv4.setTextColor(Color.RED);
Pattern pattern=Pattern.compile("www.cympac.com");
Linkify.addLinks(tv4,pattern,"http://");
tv4.setTextColor(Color.GREEN);
actv=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
Button b1=(Button)findViewById(R.id.button1);
Button b2=(Button)findViewById(R.id.button2);
Button b3=(Button)findViewById(R.id.button3);
Button b4=(Button)findViewById(R.id.button4);
actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
actv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Mytask1().execute(params1);
}
});
}
private class Mytask1 extends AsyncTask<Void,Void,String[]>
{
@Override
protected String[] doInBackground(Void... params1)
{
try{
URL url=new URL("http://cympac.com/apps/aixcomm.txt");
BufferedReader buf = new BufferedReader(new InputStreamReader(url.openStream()));
String readString = new String();
ArrayList<String> val = new ArrayList();
int i=0;
while ((readString = buf.readLine()) != null) {
Log.d("line: ", readString);
val.add(readString);
Log.d("values", val.get(i).toString());
i++;
}
/*String[] strarray = new String[val.size()];
strarray = val.toArray(strarray);
for(String s : strarray)
Toast.makeText(getBaseContext(), "data:"+s, Toast.LENGTH_SHORT).show();*/
String[] strarray = new String[val.size()];/// SEE THIS
strarray = val.toArray(strarray);
}
catch(Exception e)
{
e.printStackTrace();
}
return strarray;
}
protected void onPostExecute(String[] result)
{
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(Aixclass.this,android.R.layout.select_dialog_item,strarray);
actv.setThreshold(1);
actv.setAdapter(adapter);
super.onPostExecute(result);
}
}
}
しかし、私は強制的に閉じています。非同期タスクを使用せずにプログラムを実行すると、エミュレータで動作しましたが、実際のデバイスでは失敗しました。したがって、aynctaskを使用しましたが、上記のコードは強制的に閉じています。autocompletetextviewをクリックすると、「強制的に閉じる」が表示されます。 logcatの出力は次のとおりです。
08-30 14:44:40.894: E/AndroidRuntime(1026): FATAL EXCEPTION: main
08-30 14:44:40.894: E/AndroidRuntime(1026): java.lang.NullPointerException
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.util.Arrays$ArrayList.<init>(Arrays.java:49)
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.util.Arrays.asList(Arrays.java:171)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.example.cd16.Aixclass$Mytask1.onPostExecute(Aixclass.java:205)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.example.cd16.Aixclass$Mytask1.onPostExecute(Aixclass.java:1)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.AsyncTask.finish(AsyncTask.java:417)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.AsyncTask.access$300(AsyncTask.java:127)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.Handler.dispatchMessage(Handler.java:99)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.Looper.loop(Looper.java:123)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.lang.reflect.Method.invokeNative(Native Method)
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.lang.reflect.Method.invoke(Method.java:521)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-30 14:44:40.894: E/AndroidRuntime(1026): at dalvik.system.NativeStart.main(Native Method)