2014-03-29 56 views
0

我目前正在開發一個需要解析在線JSON並將其顯示到自定義列表視圖中的android應用程序。解析JSON並將其顯示到自定義列表視圖android

我的問題是,當我運行它有一個錯誤的應用程序說

org.json.JSONException: End of input at character 0 

這是我做的:

* 佈局/ row_listitem.xml *

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="80dp" 
android:orientation="vertical" 
android:padding="5dp" > 

<ImageView 
    android:id="@+id/iv_icon_social" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_centerVertical="true" 
    android:background="@drawable/image1" 
    android:src="@drawable/image1" 
    android:visibility="gone" /> 

<LinearLayout 
    android:id="@+id/thumbnail" 
    android:layout_width="fill_parent" 
    android:layout_height="85dp" 
    android:layout_alignParentRight="true" 
    android:layout_marginTop="0dp" 
    android:layout_toRightOf="@+id/iv_icon_social" 
    android:gravity="center_vertical" 
    android:orientation="vertical" 
    android:padding="5dip" 
    android:visibility="visible" > 

    <TextView 
     android:id="@+id/txt_ttlsm_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="10dp" 
     android:text="Sample text" 
     android:textSize="18dp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/txt_ttlcontact_row2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="0dp" 
     android:layout_marginTop="3dp" 
     android:paddingLeft="10dp" 
     android:maxEms="20" 
     android:maxLines="2" 
     android:singleLine="false" 
     android:ellipsize="end" 
     android:text="Sample text2" 
     android:textColor="#808080" 
     android:textSize="15dp" 
     android:textStyle="normal" 
     android:visibility="visible" /> 


</LinearLayout> 

</RelativeLayout> 

* layouts/activity_main.xml *

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" > 

    </ListView> 

</RelativeLayout> 

MyBaseAdapter.java

package com.example.parsing_online; 

import java.util.ArrayList; 
import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class MyBaseAdapter extends BaseAdapter { 

    private Activity activity; 
    private static ArrayList title,notice; 
    private static LayoutInflater inflater = null; 


    public MyBaseAdapter(Activity a, ArrayList b, ArrayList bod) { 
     activity = a; 
     this.title = b; 
     this.notice=bod; 

     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 



    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View vi = convertView; 
     if (convertView == null){ 
      vi = inflater.inflate(R.layout.row_listitem, null); 
     } 

     TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title 
     String song = title.get(position).toString(); 
     title2.setText(song); 


     TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice 
     String song2 = notice.get(position).toString(); 
     title22.setText(song2); 



     return vi; 
    } 

} 

,並在我的MainActivity.java

package com.example.parsing_online; 

    import java.io.IOException; 
    import java.util.ArrayList; 

    import org.apache.http.HttpResponse; 
    import org.apache.http.client.HttpClient; 
    import org.apache.http.client.methods.HttpPost; 
    import org.apache.http.impl.client.DefaultHttpClient; 
    import org.apache.http.util.EntityUtils; 
    import org.json.JSONArray; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

    import android.app.Activity; 
    import android.os.AsyncTask; 
    import android.os.Bundle; 
    import android.widget.ListView; 



    public class MainActivity extends Activity { 

    ArrayList<String> title_array = new ArrayList<String>(); 
    ArrayList<String> notice_array = new ArrayList<String>(); 
    ListView list; 
    MyBaseAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     list = (ListView) findViewById(R.id.listView1); 
     new TheTask().execute(); 
    } 

    class TheTask extends AsyncTask<Void, Void, String> { 

     @Override 
     protected String doInBackground(Void... params) { 
      String str = null; 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(
         "http://******.com/api/v1/***"); 
      httppost.addHeader("Authorization", "Token token=Wa5sfwP3ku7c15qkZTsdSA"); 
      HttpResponse response = httpclient.execute(httppost); 
      str = EntityUtils.toString(response.getEntity()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
      return str; 
     } 



     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      String response = result.toString(); 
      try { 
      JSONArray new_array = new JSONArray(response); 

      for (int i = 0, count = new_array.length(); i < count; i++) { 
       try { 
        JSONObject jsonObject = new_array.getJSONObject(i); 
        title_array.add(jsonObject.getString("title").toString()); 
        notice_array.add(jsonObject.getString("notice").toString()); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      adapter = new MyBaseAdapter(MainActivity.this, title_array, notice_array); 
      list.setAdapter(adapter); 
      } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 

     } 
    } 

    } 
+0

什麼問題? – Raghunandan

+0

org.json.JSONException:字符0輸入結束 –

+0

發佈從服務器獲取的json,並且適配器中的getCount應該返回arraylist的長度 – Raghunandan

回答

0

只是檢查JSON。我認爲它不是一個有效one.Just嘗試與下面一個

{ 
"id": "4", 
"title": "Test", 
"notice": "Test" 
} 
相關問題