2016-04-28 59 views
-1

我知道這可能聽起來像一個重複的問題,但我已經嘗試過所有的解決方案沒有works.It顯示錯誤「無法解析構造函數ArrayAdapter」我有Mainview中的listview我已經通過到第二個活動,我正在搜索遠程數據庫並在列表視圖中顯示結果。 乘坐look..Thank你.. 這是mainactivity:無法解析構造函數在AsyncTask中的onPostExecute

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

試試這可能會幫助你使用上下文而不是這個。 adapter = new ArrayAdapter (context,R.layout.class,names); – Nowshad

+0

也請發佈您的ArrayAdapter類代碼。 – Nowshad

+0

@Nowshad ArrayAdapter是android中的預定義類。 –

回答

1

你必須編輯您的SearchActivity.java。首先命名爲SearchAsyncTask。你沒有初始化name []字符串數組,它不會爲它拋出空指針異常。

這裏是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); 
    } 
} 

的代碼,您應該也適用於空檢查爲異常的情況下,你作爲值返回null。所以再次如果發生任何異常,它會崩潰。也不需要定義全局變量String []名稱,因爲您沒有使用該變量。我也編輯過班級和班級名稱。請檢查。

+0

非常感謝先生!我感謝你的努力,消除了我的愚蠢。 –

+0

不用擔心。快樂編碼 –

0

請通過活動的背景下,以異步任務,代替使用這

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

其中上下文是從this.context = context;

,從不使用活動作爲後綴的AsyncTask(糟糕的做法) (而不是SearchActivity的使用SearchAsyncTask)

+0

允許我在運行時建立但「不幸停止工作」。 –

+0

logcat在這裏... http://pastebin.com/8Gxy8Hkd –

相關問題