2015-06-15 5 views
0

Я очень новичок в разработке приложений для Android, и мне нужно получить данные из моей локальной базы данных xampp mysql. Это сообщение об ошибке, которое я продолжаю получать.Почему он говорит, что это строка?

06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONArray 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at org.json.JSONArray.<init>(JSONArray.java:96) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at org.json.JSONArray.<init>(JSONArray.java:108) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at com.example.shirlyn.attendancesystem.StudentJSONParser.parseFeed(StudentJSONParser.java:18) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at com.example.shirlyn.attendancesystem.MainActivity$ThreadClass.onPostExecute(MainActivity.java:111) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at com.example.shirlyn.attendancesystem.MainActivity$ThreadClass.onPostExecute(MainActivity.java:95) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:636) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at android.os.AsyncTask.access$500(AsyncTask.java:177) 
06-15 15:12:31.472 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at android.os.Looper.loop(Looper.java:135) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
06-15 15:12:31.473 28252-28252/com.example.shirlyn.attendancesystem W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Это мой файл PHP get_all_products.php

<?php // array for JSON response 
$response = array(); 

// include db connect class 
require_once __DIR__ . '/db_connect.php'; 

// connecting to db 
$db = new DB_CONNECT(); 

// get all products from products table 
$result = mysql_query("SELECT * FROM student") or die(mysql_error()); 

// check for empty result 
if (mysql_num_rows($result) > 0) { 
// looping through all results 
// products node 
$response = array(); 

while ($row = mysql_fetch_assoc($result)) { 
    // temp user array 
    $response[] = $row; 
} 
// success 

// echoing JSON response 
echo json_encode($response); 
} else { 
// no products found 
$response["success"] = 0; 
$response["message"] = "No students found"; 

// echo no users JSON 
header(‘Content-type: application/json’); 
echo json_encode($response); 
} 
?> 

Результаты get_all_products.php, если я запустить его на моем браузере, и это кажется правильным ...

[{"student_id":"TP028616","student_name":"Shirlyn Hoe Yee Lyn","student_username":"lyn","student_password":"123"},{"student_id":"TP033500","student_name":"Ryan Teh Hoon Meng","student_username":"teh","student_password":"123"}] 

Это мой класс java в моем приложении для Android. StudentJSONParser.java

package com.example.shirlyn.attendancesystem; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

public class StudentJSONParser { 
    public static List<Student> parseFeed(String content){ 

     try { 
      System.out.println("begin parsing"); 
      JSONArray ar = new JSONArray(content); 
      List<Student> studentList = new ArrayList<>(); 

      for(int i = 0 ; i < ar.length() ; i++){ 
       System.out.println("loop " + i); 
       JSONObject obj = ar.getJSONObject(i); 
       Student student = new Student(obj.getString("student_id"), obj.getString("student_name"), obj.getString("student_username"), obj.getString("student_password")); 

       studentList.add(student); 
       System.out.println("complete loop " + i); 
      } 
      System.out.println("complete parsing"); 

      return studentList; 

     } catch (JSONException e) { 
      e.printStackTrace(); 
      System.out.println("error parsing"); 

      return null; 
     } 

    } 
} 

так это проблема с файлом .php, не возвращающим jsonarrays? или логика моего приложения неверна? Спасибо за все ответы заранее.

это мой AsyncTask класс

public class MainActivity extends ActionBarActivity implements View.OnClickListener { 
private Button loginbtn; 
private EditText usernameTxt, passwordTxt; 
private ProgressBar pb; 

private List<Student> studentslist; 

public final static String readStudentphp = "http://192.168.0.103/webservice/get_all_products.php"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    OnClickButtonListener(); 
    initLogin(); 
    pb = (ProgressBar) findViewById(R.id.progressBar); 
    pb.setVisibility(View.INVISIBLE); 
} 

private void initLogin(){ 
    usernameTxt = (EditText) findViewById(R.id.usernameTxt); 
    passwordTxt = (EditText) findViewById(R.id.passwordTxt); 
} 

private void OnClickButtonListener(){ 
    loginbtn = (Button) findViewById(R.id.login); 
    loginbtn.setOnClickListener(this); 
} 

private void requestData(String uri){ 
    ThreadClass t = new ThreadClass(); 
    t.execute(uri); 
} 

@Override 
public void onClick(View v) { 
    requestData(readStudentphp); 
    //Intent intent = new Intent("com.example.shirlyn.attendancesystem.MainMenu"); 
    //startActivity(intent); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

private class ThreadClass extends AsyncTask<String, String, String>{ 
    @Override 
    protected void onPreExecute(){ 
     pb.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String content = HTTPManager.getData(params[0]); 

     return content; 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     System.out.println("Before parsing"); 
     studentslist = StudentJSONParser.parseFeed(result); 
     System.out.println("After parsing"); 
     if(studentslist != null && studentslist.size() > 0) 
      System.out.println(studentslist.get(0).getStudent_name()); 
     pb.setVisibility(View.INVISIBLE); 
    } 
} 

}

+1

Просто уходите со своего названия Я думаю, вам нужно отправить соответствующие заголовки, когда вы отправляете JSON .... 'application/json' Какая ошибка? – ficuscr

+0

Вам не хватает заголовка ('Content-type: application/json'); 'когда есть результаты, я бы предложил использовать простой класс ответа, который позаботится об этом. – Perry

+0

это была ошибка, я удалил ее в своем php-файле. спасибо за указание –

ответ

1

Похоже, вы пытаетесь разобрать HTML как JSON (на основе <br тега в вашей ошибки).

<br of type java.lang.String cannot be converted to JSONArray

Дважды проверьте вывод, который вы пытаетесь разобрать, чтобы убедиться, что вы получаете JSON от вашей конечной точки. Возможно, это заголовок accepts или что-то в этом роде.

+0

, так что с моим файлом php нет ничего плохого? из массивов json, я хотел сохранить их в массиве. –

+0

@ user3244616 Если вышеуказанный ответ решил вашу проблему, вы можете принять ответы. И что вы имеете в виду, нет ничего плохого в моем php-файле? – Perry

+0

Непонятно, что вы нажимаете PHP-код, который вы намереваетесь делать. Если вы посмотрите на всю строку, которую вы пытаетесь проанализировать как JSON, вы должны выяснить, что возвращает этот HTML. Код PHP, который я вижу, кажется, не возвращает HTML, поэтому разумно, что вы не нажимаете на него или получаете ошибку, как предположил @MarcB. – pherris

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