2013-03-09 4 views
0

У меня есть файл PHP, который я использую для отправки информации в формате JSON для андроид, это код файла PHP:JSON массив не заселять все элементы ListView

<?php 

$host="localhost"; 
$user="root"; 
$pass=""; 
$dbname="ltc"; 

$type=$_GET['type']; 



$con= mysql_connect($host,$user,$pass); 
$BD= mysql_select_db($dbname, $con); 

$query=mysql_query("select * from posts where type='".$type."'"); 
$num=mysql_num_rows($query); 


if($num>=1) 
{ 
    while($list=mysql_fetch_assoc($query)) 
    { 

     $output=$list; 
     echo json_encode($output); 
    } 
     mysql_close(); 
    } 
    else 
    { 
    echo "error"; 
    } 
?> 

информации отправлено Android перечислены ниже:

{"IDpost":"1","username":"you","FirstN":"Mounzer","LastN":"Yaghi","Content":"test1","Type":"CARS","Dateofp":"2013-03-03"}{"IDpost":"2","username":"boss","FirstN":"Marwan","LastN":"Geha","Content":"test2\r\n","Type":"CARS","Dateofp":"2013-03-05"} 

Сейчас в андроида я пытаюсь заполнить ListView с некоторыми информациями, используя массив JSON, код в андроид:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
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.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class Posts extends Activity { 
String type,firstname,lastname,email,number,username,content; 
HttpClient httpclient; 
HttpPost httppost; 
ArrayList<NameValuePair> nameValuePairs; 
HttpResponse response; 
HttpEntity entity; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     Bundle gotBasket=getIntent().getExtras(); 
     type=gotBasket.getString("type_post"); 
     this.setTitle(type); 

     setContentView(R.layout.addpost); 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

httpclient = new DefaultHttpClient(); 
httpclient = new DefaultHttpClient(); 
httppost = new HttpPost("http://192.168.1.38/LTC/Uploadposts.php?type="+type+""); 
try{ 
nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("type",type)); 
nameValuePairs.add(new BasicNameValuePair("FirstN",firstname)); 
nameValuePairs.add(new BasicNameValuePair("LastN",lastname)); 
nameValuePairs.add(new BasicNameValuePair("Content",content)); 

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
response = httpclient.execute(httppost); 



if(response.getStatusLine().getStatusCode()==200) 
{ 

entity=response.getEntity(); 
if(entity !=null) 
{ 
    InputStream instream=entity.getContent(); 
JSONObject jsonResponse = new JSONObject(convertStreamToString(instream)); 
//Toast.makeText(getBaseContext(),jsonResponse.toString(),Toast.LENGTH_LONG).show(); 
String retUser=jsonResponse.getString("username"); 
String retcont=jsonResponse.getString("Content"); 
String getf=jsonResponse.getString("FirstN"); 
String getl=jsonResponse.getString("LastN"); 
String dop=jsonResponse.getString("Dateofp"); 




try { 
    JSONArray jArray = new JSONArray("["+jsonResponse.toString()+"]"); 

    int jArrayLength = jArray.length(); 
    List<String> listContents = new ArrayList<String>(jArrayLength); 

    for(int i =0; i<jArray.length(); i++){ 

     JSONObject json_data = jArray.getJSONObject(i); 
     listContents.add(json_data.getString("FirstN")+" "+json_data.getString("LastN")+"     "+json_data.getString("Dateofp")+"\n\n"+json_data.getString("Content")); 

    } 

    ListView myListView = (ListView) findViewById(R.id.listView2); 
    myListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listContents)); 

}catch(JSONException e){ 
    Log.e("log_tag","Error parsin data "+e.toString()); 
} 

}} 

}//End of first try 

catch(Exception e) 
{ 
    Toast.makeText(getBaseContext(), e.toString(),Toast.LENGTH_LONG).show(); 

} // End of first catch 



    } //End of oncreate bundle 



     private static String convertStreamToString(InputStream is) 
     { 


     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try 
     { 

     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     }catch(IOException e) 
     { 
     e.printStackTrace(); 
     } 
     finally 
     { 
     try{ 
      is.close(); 
     }catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     }return sb.toString(); 



     } 


} //End of Class 

Дело в том, что только первая строка таблицы базы данных заполняет список, я имею в виду, что заполняется только первый элемент в списке, он должен быть двумя элементами (2 строки из таблицы базы данных). Любая помощь?

+0

Остановить использование 'mysql_ *' функций! Посмотрите здесь: http://www.php.net/manual/en/mysqlinfo.api.choosing.php – Alfo

ответ

0

Просто двигаться json_encode за пределами while блока:

$output = array(); 
while ($list = mysql_fetch_assoc($query)) { 
    $output[] = $list; 
} 

echo json_encode($output); 

Таким образом, вы заполнить все данные в массиве, а затем отправить его сразу после цикла.

+0

Простите, но это не сработало – moonwalker

+0

Что делает 'json_encode'? Также обратите внимание, что вы должны изменить свой Java-код, чтобы иметь возможность работать с массивом объектов. – dfsq

+0

он производит: [{«IDpost»: «1», «username»: «вы», «FirstN»: «Mounzer», «LastN»: «Yaghi», «Content»: «test1», «Type ":" АВТОМОБИЛИ " "Dateofp": "2013-03-03"}, { "IDpost": "2", "пользователь": "хозяин", "FirstN": "Марван", "LastN":" Geha »,« Содержимое »:« test2 \ r \ n »,« Type »:« CARS »,« Dateofp »:« 2013-03-05 »}] Что мне изменить в java, пожалуйста, помогите мне – moonwalker

0

Ну, вы возвращаете недействительный json из того, что я вижу выше. Сделайте то, что dfsq сказал в php-коде. После этого в вашем java-коде вы можете преобразовать json-строку в JSONArray и с помощью метода getJSONObject вы можете получить доступ к каждому объекту в массиве.

JSONArray jsonArray = new JSONArray(convertStreamToString(instream)); 
int length = jsonArray.length(); 

for (int i=0; i < length; i++) { 
    JSONObject row = jsonArray.getJSONObject(i); 

    // Do whatever you want to do with the row object here 
} 
+0

, но вы ничего не изменили в моем java-коде, мне нужно только знать, что менять в коде, чтобы сделать моя программа работает. Спасибо – moonwalker

+0

@moonwalker Вам просто нужно использовать объект row для заполнения переменной 'listContents', и, наконец, вы должны очистить свой код и удалить ненужные переменные, несколько определений и т. Д. Странно, что вы не можете интегрировать мои ответьте в свой код. – jithujose

Смежные вопросы