2016-04-28 19 views
-1

これは繰り返し質問のように聞こえるかもしれませんが、私は解決策を何も試みませんでした。何も問題がありません "コンストラクタArrayAdapterを解決できません"私はリモートデータベースを検索し、リストビューで結果を表示しています。AsyncTaskのonPostExecuteのコンストラクタArrayAdapterを解決できません

public class Main2Activity extends AppCompatActivity 
implements NavigationView.OnNavigationItemSelectedListener { 
private EditText location; 
private TextView result ; 
ListView lv; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    location = (EditText)findViewById(R.id.editText1); 
    result = (TextView)findViewById(R.id.textView4); 
    lv = (ListView) findViewById(R.id.lv); 
} 
public void search(View view){ 
    String slocation = location.getText().toString(); 
    new SearchActivity(this,lv,1).execute(slocation); 
} 

SearchActivity

public class SearchActivity extends AsyncTask<String,Void,String[]>{ 
private Context context; 
private int byGetOrPost = 0; 
private TextView sresult; 
ListView lv1; 
JSONArray garages; 
String[] names; 

public SearchActivity(Context context,ListView lv1,int flag) { 
    this.context = context; 
    byGetOrPost = flag; 
    this.lv1 = lv1; 
} 

protected void onPreExecute(){ 

} 

@Override 
protected String[] doInBackground(String... arg0) { 
     try{ 
      String location = (String)arg0[0]; 

      String link="http://garagekhojo.in/androidtest.php"; 
      String data = URLEncoder.encode("location", "UTF-8") + "=" + URLEncoder.encode(location, "UTF-8"); 

      URL url = new URL(link); 
      URLConnection conn = url.openConnection(); 

      conn.setDoOutput(true); 
      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

      wr.write(data); 
      wr.flush(); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

      StringBuilder sb = new StringBuilder(); 
      String line = null; 

      // Read Server Response 
      while((line = reader.readLine()) != null) 
      { 
       sb.append(line); 
       break; 
      } 

      String newsb = sb.toString(); 
      JSONObject jo = new JSONObject(newsb) ; 
      garages = jo.getJSONArray("garages"); 
      for (int i = 0; i < garages.length(); i++) { 
       JSONObject c = garages.getJSONObject(i); 

       names[i] = c.getString("name"); 
      } 
      return names; 


     } 
     catch(Exception e){ 
      return null; 
     } 

} 

@Override 
protected void onPostExecute(String[] names){ 
    ArrayAdapter<String> adapter; 
    adapter = new ArrayAdapter<String>(this, R.layout.class,names); 
    lv1.setAdapter(adapter); 
} 

}

+0

これを試すと、この代わりにコンテキストを使用するのに役立ちます。 アダプタ=新しいArrayAdapter (コンテキスト、R.layout.class、名前); – Nowshad

+0

もArrayAdapterクラスコードを投稿してください。 – Nowshad

+0

@Nowshad ArrayAdapterはアンドロイドの事前定義されたクラスです。 –

答えて

1

あなたのSearchActivity.javaを編集する必要があります。まずSearchAsyncTaskという名前を付けます。あなたはnullポインタ例外をなぜ投げているのかわからない[]文字列配列を初期化していません。ここで

はあなたが値としてnullを返却する例外の場合のように、あまりにもヌルチェックを適用する必要がありますSearchAsyncTask.java

public class SearchAsyncTask extends AsyncTask<String,Void,String[]>{ 
private Context context; 
private int byGetOrPost = 0; 
private TextView sresult; 
ListView lv1; 
JSONArray garages; 

public SearchActivity(Context context,ListView lv1,int flag) { 
    this.context = context; 
    byGetOrPost = flag; 
    this.lv1 = lv1; 
} 

protected void onPreExecute(){ 

} 

@Override 
protected String[] doInBackground(String... arg0) { 
    try{ 
     String location = (String)arg0[0]; 

     String link="http://garagekhojo.in/androidtest.php"; 
     String data = URLEncoder.encode("location", "UTF-8") + "=" + URLEncoder.encode(location, "UTF-8"); 

     URL url = new URL(link); 
     URLConnection conn = url.openConnection(); 

     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

     wr.write(data); 
     wr.flush(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while((line = reader.readLine()) != null) 
     { 
      sb.append(line); 
      break; 
     } 

     String newsb = sb.toString(); 
     JSONObject jo = new JSONObject(newsb) ; 
     garages = jo.getJSONArray("garages"); 
     String[] names = new String[garages.length()]; 
     for (int i = 0; i < garages.length(); i++) { 
      JSONObject c = garages.getJSONObject(i); 
      names[i] = c.getString("name"); 
     } 
     return names; 
    } 
    catch(Exception e){ 
     return null; 
    } 
} 

@Override 
protected void onPostExecute(String[] names){ 
    if(names!=null){ 
     ArrayAdapter<String> adapter; 
     adapter = new ArrayAdapter<String>(context, R.layout.class,names); 
     lv1.setAdapter(adapter); 
    } 
} 

のコードです。何か例外が発生した場合には再びクラッシュします。また、変数を使用していないので、グローバル変数String []の名前を定義する必要はありません。私はクラスとクラスの名前も編集しました。チェックしてください。

+0

ありがとうございました!私はあなたの努力に感謝し、私のばかげを解消します。 –

+0

心配はいりません。ハッピーコーディング –

0

非同期タスクにアクティビティのコンテキストを渡すの代わりに使用してください: これはmainactivityある .. look..Thankにあなたを取りますこの

adapter = new ArrayAdapter<String>(context, R.layout.class,names); 

コンテキストはです

、決してAsyncTask(悪い習慣) のための接尾辞としての活動を使用します(代わりにSearchActivityのSearchAsyncTaskを使用)

+0

ビルドすることはできますが、実行中は「残念ながら作業を停止しました」。 –

+0

logcatはこちらです... http://pastebin.com/8Gxy8Hkd –

関連する問題