2017-12-05 6 views
0

私はAndroidプロジェクトを作成しています。ここでは、データベースに保存されているすべてのデータを表示します。私はすでにその部分を行っていますが、問題は私がローカルホストからデータを取得できることです。しかし、私がホストされているサーバーに移動すると、私にデータが与えられません。サーバーに接続して特定のPHPファイルにアクセスできましたが、データがある場合は空のJSON文字列を返しています。私は別のクラスを使用して掲載していホストされているサーバーがAndroidアプリケーションにデータを提供していません

public class Connecter { 

public static HttpURLConnection connect (String urlAddress){ 

    try { 
     URL url = new URL(urlAddress); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     ///////Setting properties to con object 
     con.setRequestMethod("POST"); 
     con.setConnectTimeout(20000); 
     con.setReadTimeout(20000); 

     con.setDoInput(true); 
     con.setDoOutput(true); 
     ////////Returning the Con object 
     return con; 


    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return null; 
    } 
} 

は、ここに私の接続クラスです。ここで

String address2 = "http://www.tutorshubbd.com/android/allTeacher.php"; 
    Log.d(TAG," .............///..........Primary Data Display "); 
    String query = ""; 
    SendGetAllTeachers sg2 = new SendGetAllTeachers(ActivityTeacher.this,address2,query,listViewTeachers,ivNoData,ivNoInternet); 
    sg2.execute(); 

は、私が使用している特定のPHPファイルです:

<?php 
 

 

 
$host ='tutorshubbd.com'; 
 
$username = 'cpanel_username'; 
 
$pwd = 'cpanel_password'; 
 
$db = 'tutorshu_db'; 
 

 
$con = mysqli_connect($host, $username, $pwd, $db) or die('Unable to connect'); 
 

 
if (mysqli_connect_error($con)) { 
 
\t echo "Failed to connect to the DataBase".mysqli_connect_error(); 
 

 
} 
 

 
$name = $_POST['Query']; 
 

 

 
$sql = "SELECT * FROM Teacher WHERE Name LIKE '%$name%'"; 
 

 
$query = mysqli_query($con, $sql); 
 

 
if ($query) { 
 
\t while ($row = mysqli_fetch_array($query)) { 
 
\t \t $data[] = $row; 
 
\t } 
 
\t print(json_encode($data)); 
 

 
}else{ 
 
\t echo "Not Found!"; 
 
} 
 
mysqli_close($con); 
 

 
?>

そして、ここでは、私は、特定のPHPファイルのURLを渡すために使用しているプロセスであり、

ここに、私がデータをポストしてフェッチしているいくつかの追加コードがあります。 (私はこのコードを使用してlocalhostからデータを取得するのに問題はありませんが、問題を理解するためにそれを見なければならないので、これを置いてください)。

public class SendGetAllTeachers extends AsyncTask<Void,Void,String> { 

private static final String TAG ="ActivityTeacher"; 
private Context context; 
private String urlAddress; 
private String query; 
private ListView listView; 
private ImageView imageViewNoData, imageViewNoSignal; 
private ProgressDialog progressDialog; 

public SendGetAllTeachers(Context context, String urlAddress, String query, ListView listView, ImageView...imageViews) { 
    this.context = context; 
    this.urlAddress = urlAddress; 
    this.query = query; 
    this.listView = listView; 

    this.imageViewNoData=imageViews[0]; 
    this.imageViewNoSignal=imageViews[1]; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    progressDialog = new ProgressDialog(context); 
    progressDialog.setTitle("Search:"); 
    progressDialog.setMessage("Searching for Data..."); 
    progressDialog.show(); 
} 

@Override 
protected String doInBackground(Void... params) { 
    return this.sendAndReceive(); 
} 


@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s); 
    progressDialog.dismiss(); 

    //RESET LISTVIEW 
    listView.setAdapter(null); 


    if (s != null){ 
     if (!s.contains("null")){ 
      ParserTeacher parserT = new ParserTeacher(context,s,listView); 
      parserT.execute(); 

      imageViewNoData.setVisibility(View.INVISIBLE); 
      imageViewNoSignal.setVisibility(View.INVISIBLE); 


     }else{ 
      Log.d(TAG,"......//////////.........///////// Getting Visible ......... NO DATA______AT"); 
      Toast.makeText(context, "Sorry! No Such Data Exists.", Toast.LENGTH_SHORT).show(); 
     } 

    }else { 
     imageViewNoData.setVisibility(View.INVISIBLE); 
     Toast.makeText(context, "Sorry! Unable to connect to the server.", Toast.LENGTH_SHORT).show(); 
     imageViewNoSignal.setVisibility(View.INVISIBLE); 
    } 

} 

private String sendAndReceive(){ 
    HttpURLConnection con = Connecter.connect(urlAddress); 
    if(con == null) 
     return null; 

    try { 
     OutputStream outputStream = con.getOutputStream(); 
     BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
     Log.d(TAG,"......//////////.........///////// WRITING DATA ......... FIRED______"); 
     bufferedWriter.write(new DataPackager(query).packageData()); 

     Log.d(TAG,"......//////////.........///////// NOT WORKING___!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
     bufferedWriter.flush(); 
     //Release Resources. 
     bufferedWriter.close(); 
     outputStream.close(); 


     //Response Code 
     int responseCode = con.getResponseCode(); 
     //Decoding response code 
     if (responseCode == con.HTTP_OK){ 

      //Return Data 
      InputStream inputStream = con.getInputStream(); 

      //Read the returned data... 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
      String line; 
      Log.d(TAG,"......//////////.........///////// DATA READ......... FIRED______"); 
      StringBuffer response = new StringBuffer(); 

      if (bufferedReader!=null){ 
       while((line = bufferedReader.readLine())!=null){ 

        response.append(line+"\n"); 
       } 

      }else 
       return null; 
      return response.toString(); 

     }else 
      return String.valueOf(responseCode); 




    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

} 

////////////////////////////////

public class DataPackager { 

String query; 

public DataPackager(String query) { 
    this.query = query; 
} 

public String packageData(){ 

    JSONObject jsonObject = new JSONObject(); 
    StringBuffer queryStringBuffer = new StringBuffer(); 

    try { 
     jsonObject.put("Query", query); 
     Boolean fistValue = true; 
     Iterator iterator = jsonObject.keys(); 

     do { 
      String key = iterator.next().toString(); 
      String value = jsonObject.get(key).toString(); 

      if (fistValue){ 
       fistValue = false; 
      }else{ 
       queryStringBuffer.append("&"); 
      } 

      queryStringBuffer.append(URLEncoder.encode(key,"UTF-8")); 
      queryStringBuffer.append("="); 
      queryStringBuffer.append(URLEncoder.encode(value,"UTF-8")); 

     }while (iterator.hasNext()); 

     return queryStringBuffer.toString(); 


    } catch (JSONException e) { 
     e.printStackTrace(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 



} 

//// ///////////////////////////

public class ParserTeacher extends AsyncTask<Void,Void,Integer> { 
public static final String TAG = "Parser Teacher"; 

    private Context c; 
    private String data; 
    private ListView lv; 



    List<GetItems> items = new ArrayList<>(); 




    public ParserTeacher(Context c, String data, ListView lv) { 
     this.c = c; 
     this.data = data; 
     this.lv = lv; 
    } 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Integer doInBackground(Void... params){ 
     return this.parse(); 
    } 


    @Override 
    protected void onPostExecute(Integer integer) { 
     super.onPostExecute(integer); 

     if (integer ==1){ 
      ///////BIND TO LIST VIEW............................... 
      CustomAdapter adapter = new CustomAdapter(c, items); 
      lv.setAdapter(adapter); 




      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

        GetItems sendItem = items.get(i); 

        String name = sendItem.getName(); 


        //Snackbar.make(view,"Teachers Detail Mode",Snackbar.LENGTH_LONG).show(); 

        Intent I = new Intent(); 
        I.setClass(view.getContext(),TeachersView.class); 
        Bundle extras = new Bundle(); 
        extras.putString("Name", name); 


        I.putExtras(extras); 
        view.getContext().startActivity(I); 

       } 
      }); 



     }else{ 
      Log.d(TAG," >>>>>>>>>>>>>>>>>>>>>>>>>>>> Parsing Error!"); 
      Toast.makeText(c, "Unable to Parse...!", Toast.LENGTH_SHORT).show(); 


     } 




    } 


    private int parse(){ 

     try{ 
      JSONArray ja = new JSONArray(data); 

      //Log.i("tagconvertstr","............................................\n\n"+ "["+ja+"]"); 
      JSONObject jo = null; 
      items.clear(); 

      GetItems getItems = null; 



      for (int i=0; i<ja.length();i++){ 
       jo=ja.getJSONObject(i); 

       String name = jo.getString("Name"); 



       getItems = new GetItems(); 

       getItems.setName(name); 


       items.add(getItems); 

      } 

      return 1; 

     } catch (JSONException e) { 
      Log.d(TAG,"Here is the STACK TRACE.........>>>>>>>>>>>>>>>>>>>>>>>>>>>"); 
      e.printStackTrace(); 
     } 
     return 0; 
    } 
    } 

(私はこのコードを使用してローカルホストにあるデータをフェッチ支障がありませんよ)。

URLを読み込むと、多くのデータがあることがわかります(時々ロードされることがあります)が、アプリケーションでは空の文字列を返しています。私は、ボレーや改造のようなライブラリを使用していません。

私はこれに関する多くの問題を見ましたが、これはそれらとは少し異なります。接続できますが、ホストされたサーバーからフェッチできませんが、ローカルホストからフェッチできます。

+0

'新しいURL(urlAddress);'。あなたはどのURLを使用しているのかわかりません。さらにあなたは何も投稿していません。 – greenapps

+0

私たちがあなたのURLを試してみる必要があるなら、get-thenを使ってリンクを投稿してください。 – greenapps

+2

あなたのPHPコードにガベージエコーがあるため、URLが無効なjsonを返す( 'header'の最初の行と 'DB connected successfully'エコーを取り除く)疑問があるときは、** [jsonlint .com](http://jsonlint.com)** – YvesLeBorg

答えて

0

応答ヘッダーにはContent-Type値がありません。データを印刷する前に、PHPコードにこの行を追加する必要があります。

header('Content-type:application/json;charset=utf-8'); 
関連する問題