Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在新AsyncTask中输出来自上一个AsyncTask的JSON响应_Php_Android_Json_Mysqli_Android Asynctask - Fatal编程技术网

Php 在新AsyncTask中输出来自上一个AsyncTask的JSON响应

Php 在新AsyncTask中输出来自上一个AsyncTask的JSON响应,php,android,json,mysqli,android-asynctask,Php,Android,Json,Mysqli,Android Asynctask,我目前正在尝试为学生财务应用程序创建一个设置页面,每当用户打开设置页面时,他们的设置都会使用在线托管的php脚本从数据库加载 这很好,但是当我执行另一个异步任务时,当他们单击将设置保存到数据库时,我得到的JSON响应与第一个异步任务相同 每个任务调用一个不同的PHP脚本,因此它们之间没有干扰问题(我相信),但我不知道为什么我的PHP代码没有得到正确的响应 包含异步任务的Java文件: package com.samjackson.scholardollars; import android.a

我目前正在尝试为学生财务应用程序创建一个设置页面,每当用户打开设置页面时,他们的设置都会使用在线托管的php脚本从数据库加载

这很好,但是当我执行另一个异步任务时,当他们单击将设置保存到数据库时,我得到的JSON响应与第一个异步任务相同

每个任务调用一个不同的PHP脚本,因此它们之间没有干扰问题(我相信),但我不知道为什么我的PHP代码没有得到正确的响应

包含异步任务的Java文件:

package com.samjackson.scholardollars;

import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

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

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    JSONParser jsonParser = new JSONParser();
    private static final String SETTINGS_URL = "http://appinterface-scholardollars.c9.io/getusersettings.php";
    private static final String UPDATE_SETTINGS_URL = "http://appinterface-scholardollars.c9.io/updateusersettings.php";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_MESSAGE = "message";
    private static final String TAG_BUDGET = "Budget";
    private static final String TAG_FREQUENCY = "Frequency";
    private static final String TAG_DISPLAY_NAME = "DisplayName";
    ProgressDialog pDialog;
    static int Budget;
    static String BudgetFrequency;
    static String DisplayName;
    static String postDisplayName, postBudgetFrequency, postBudget;
    EditTextPreference displayName, budget;
    ListPreference frequency;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
        SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
        sp.registerOnSharedPreferenceChangeListener(this);
        displayName = (EditTextPreference)findPreference("displayName_preference");
        frequency = (ListPreference)findPreference("frequency_preference");
        budget = (EditTextPreference)findPreference("budgetAmount_preference");
        getUserSettings();

    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Preference pref = findPreference(key);

        if(key.equals("displayName_preference")){
            EditTextPreference displayPersonName = (EditTextPreference) pref;
            pref.setSummary(displayPersonName.getText());
            postDisplayName = displayPersonName.getText();
        }else if(key.equals("frequency_preference"))
        {
            ListPreference lp = (ListPreference) pref;
            pref.setSummary(lp.getEntry());
            postBudgetFrequency = lp.getEntry().toString();
        }else if(key.equals("budgetAmount_preference")){
            EditTextPreference etp = (EditTextPreference) pref;
            pref.setSummary(etp.getText());
            postBudget = etp.getText();
        }
    }

    private void updateSettings(){
        System.out.println("updating settings");
        class AttemptSettingsUpdate extends AsyncTask<String, String, String> {

            @Override
            protected void onPreExecute(){
                super.onPreExecute();
                pDialog = new ProgressDialog(SettingsActivity.this);
                pDialog.setMessage("Updating settings...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();

            }

            @Override
            protected String doInBackground(String... args){
                System.out.println("starting background task");
                int success;
                System.out.println("ID = "+ Integer.toString(LoginActivity.getUID())+" - Budget = "+postBudget+" - Frequency: " + postBudgetFrequency + " - Display Name: "+postDisplayName);
                try{
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("budget", postBudget));
                    params.add(new BasicNameValuePair("frequency", postBudgetFrequency));
                    params.add(new BasicNameValuePair("display name", postDisplayName));
                    params.add(new BasicNameValuePair("ID", Integer.toString(LoginActivity.getUID())));

                    Log.d("Request!", "Starting at url: " + UPDATE_SETTINGS_URL);

                    JSONObject jsonNewSettings = jsonParser.makeHttpRequest(UPDATE_SETTINGS_URL, "POST", params);

                    System.out.println(jsonNewSettings);

                    success = jsonNewSettings.getInt(TAG_SUCCESS);
                    if(success==1){
                        Log.d("Changed settings!", jsonNewSettings.toString());


                        Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(intent);
                        finish();
                    }else{
                        return jsonNewSettings.getString(TAG_MESSAGE);
                    }


                }catch(JSONException e){
                    e.printStackTrace();
                }
                return null;
            }
            protected void onPostExecute(String message){
                pDialog.dismiss();
                if(message != null){
                    Toast.makeText(SettingsActivity.this, message, Toast.LENGTH_LONG).show();
                }
            }

        }

        new AttemptSettingsUpdate().execute();

    }

    @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_settings, 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;
        }else if(id == R.id.action_save){
            updateSettings();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /*public static class Prefs1Fragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settings);
        }

    }*/

    public void getUserSettings(){

        class AttemptSettings extends AsyncTask<String, String, String> {

            @Override
            protected void onPreExecute(){
                super.onPreExecute();
                pDialog = new ProgressDialog(SettingsActivity.this);
                pDialog.setMessage("Loading settings from database...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();

            }

            @Override
            protected String doInBackground(String... args){
                System.out.println("doing background task (settings)");
                int success;
                int UID = LoginActivity.getUID();
                System.out.println("UID >>>> "+UID);
                try{
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("ID", Integer.toString(UID)));

                    Log.d("Request!", "Starting");

                    JSONObject json = jsonParser.makeHttpRequest(
                            SETTINGS_URL, "POST", params);

                    success = json.getInt(TAG_SUCCESS);
                    if(success==1){
                        Log.d("Successfully accessed user settings!", json.toString());

                        Budget = json.getInt(TAG_BUDGET);
                        BudgetFrequency = json.getString(TAG_FREQUENCY);
                        DisplayName = json.getString(TAG_DISPLAY_NAME);

                        System.out.println("Budget: " + Budget + " - Budget Frequency: " + BudgetFrequency + " - Display Name: " + DisplayName);

                        return json.getString(TAG_MESSAGE);
                    }else{
                        return json.getString(TAG_MESSAGE);
                    }


                }catch(JSONException e){
                    e.printStackTrace();
                }
                return null;
            }
            protected void onPostExecute(String message){
                pDialog.dismiss();
                displayName.setSummary(DisplayName);
                frequency.setSummary(BudgetFrequency);
                budget.setSummary(Integer.toString(Budget));
                if(message != null){
                    Toast.makeText(SettingsActivity.this, message, Toast.LENGTH_LONG).show();
                }
            }

        }

        new AttemptSettings().execute();
    }
}
package com.samjackson.scholardollars;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.preference.EditTextPreference;
导入android.preference.ListPreference;
导入android.preference.preference;
导入android.preference.PreferenceActivity;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.Toast;
导入org.apache.http.NameValuePair;
导入org.apache.http.message.BasicNameValuePair;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
公共类设置活动扩展首选项活动实现SharedReferences.OnSharedPreferenceChangeListener{
JSONParser JSONParser=新的JSONParser();
私有静态最终字符串设置\u URL=”http://appinterface-scholardollars.c9.io/getusersettings.php";
私有静态最终字符串更新\u设置\u URL=”http://appinterface-scholardollars.c9.io/updateusersettings.php";
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串标记_MESSAGE=“MESSAGE”;
私有静态最终字符串标记_BUDGET=“BUDGET”;
专用静态最终字符串标记\u FREQUENCY=“FREQUENCY”;
私有静态最终字符串标记\u DISPLAY\u NAME=“DisplayName”;
ProgressDialog;
静态内部预算;
静态字符串BudgetFrequency;
静态字符串显示名;
静态字符串postDisplayName、postBudgetFrequency、postBudget;
EditTextPreference显示名称、预算;
列表偏好频率;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
SharedReferences sp=getPreferenceScreen().GetSharedReferences();
sp.registerOnSharedReferenceChangeListener(此);
displayName=(EditTextPreference)FindReference(“displayName_首选项”);
频率=(列表首选项)查找首选项(“频率首选项”);
预算=(EditTextPreference)FindReference(“budgetAmount_preference”);
getUserSettings();
}
已更改共享首选项上的公共void(SharedReferences SharedReferences,字符串键){
首选项pref=findPreference(键);
if(key.equals(“displayName_首选项”)){
EditTextPreference displayPersonName=(EditTextPreference)pref;
pref.setSummary(displayPersonName.getText());
postDisplayName=displayPersonName.getText();
}else if(键等于(“频率偏好”))
{
ListPreference lp=(ListPreference)pref;
pref.setSummary(lp.getEntry());
postBudgetFrequency=lp.getEntry().toString();
}else if(键等于(“预算数量优先”)){
EditTextPreference etp=(EditTextPreference)pref;
pref.setSummary(etp.getText());
postBudget=etp.getText();
}
}
私有void更新设置(){
System.out.println(“更新设置”);
类AttemptSettingsUpdate扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(setingsactivity.this);
setMessage(“更新设置…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…args){
System.out.println(“启动后台任务”);
成功;
System.out.println(“ID=“+Integer.toString(LoginActivity.getUID())+”-Budget=“+postBudget+”-频率:“+postBudgetFrequency+”-显示名称:“+postDisplayName”);
试一试{
List params=new ArrayList();
参数添加(新的BasicNameValuePair(“预算”,后预算));
参数添加(新的BasicNameValuePair(“频率”,postBudgetFrequency));
添加(新的BasicNameValuePair(“显示名称”,postDisplayName));
add(新的BasicNameValuePair(“ID”,Integer.toString(LoginActivity.getUID()));
Log.d(“请求!”,从url开始:“+UPDATE\u SETTINGS\u url”);
JSONObject jsonNewSettings=jsonParser.makeHttpRequest(更新设置URL,“POST”,参数);
系统输出打印LN(jsonNewSettings);
success=jsonNewSettings.getInt(TAG_success);
如果(成功==1){
Log.d(“更改的设置!”,jsonNewSettings.toString());
意向意向=新意向(SettingsActivity.this、MainActivity.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
完成();
}否则{
返回jsonNewSettings.getString(TAG_消息);
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
package com.samjackson.scholardollars;

import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class JSONParser {
    static InputStream is = null;
    static JSONObject jsonObj ;
    static String json = "";

    // default no argument constructor for jsonpaser class
    public JSONParser() {

    }


    public JSONObject getJSONFromUrl(final String url) {

        // Making HTTP request
        try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            // Executing POST request & storing the response from server  locally.
            HttpResponse httpResponse = httpClient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();

            is = httpEntity.getContent();

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

        try {


            // Create a BufferedReader
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            // Declaring string builder
            StringBuilder str = new StringBuilder();
            //  string to store the JSON object.
            String strLine = null;

            // Building while we have string !equal null.
            while ((strLine = reader.readLine()) != null) {
                str.append(strLine + "\n");
            }

            // Close inputstream.
            is.close();
            // string builder data conversion  to string.
            json = str.toString();
        } catch (Exception e) {
            Log.e("Error", " something wrong with converting result " + e.toString());
        }

        // Try block used for pasrseing String to a json object
        try {
            jsonObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("json Parsering", "" + e.toString());
        }

        // Returning json Object.
        return jsonObj;

    }



    public JSONObject makeHttpRequest(String url, String method,
                                      List<NameValuePair> params) {

        // Make HTTP request
        try {

            // checking request method
            if(method == "POST"){

                // now defaultHttpClient object
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

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

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder str = new StringBuilder();
            String strLine = null;
            while ((strLine = reader.readLine()) != null) {
                str.append(strLine + "\n");
            }
            is.close();
            json = str.toString();
        } catch (Exception e) {

        }

        // now will try to parse the string into JSON object
        try {
            jsonObj = new JSONObject(json);
        } catch (JSONException e) {

        }


        return jsonObj;

    }

}
<?php

$servername = "xxxxx";
$username = "xxxxx";
$password = "xxxxxx";
$dbname = "users";
$id = $_POST['ID'];
settype($id, "Integer");
$budget = $_POST['budget'];
settype($budget, "Integer");
$frequency = $_POST['frequency'];
$displayName = $_POST['display name'];

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    $response["success"] = 0;
    $response["message"] = "Connection error";
    die(json_encode($response));
} 

if(!empty($_POST)){
    $sql = "UPDATE `UserSettings` SET `Budget`='$budget',`BudgetFrequency`='$frequency',`DisplayName`='$displayName' WHERE `ID` = '$id'";
    $result = $conn->query($sql);
    $testResult = "SELECT `ID`, `Budget`, `BudgetFrequency`, `DisplayName` FROM `UserSettings` WHERE `ID` = '$id'";
    $result2 = $conn->query($testResult);
    if($result2->num_rows > 0){
        while($row = $result2->fetch_assoc()){
            if($row["Budget"] = $budget AND $row["BudgetFrequency"] = $frequency AND $row["DisplayName"] = $displayName){
                $response["success"] = 1;
                $response["message"] = "Settings updated!";
                die(json_encode($response));
            }else{
                $response["success"] = 0;
                $response["message"] = "Settings do not match after update";
                die(json_encode($response));
            }
        }
    }else{
        $response["success"] = 0;
        $response["message"] = "Second query returned no results";
        die(json_encode($response));
    }

}else{
    $response["success"] = 0;
    $response["message"] = "No data provided";
    die(json_encode($response));
}

?>
<?php

$servername = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
$dbname = "users";
$id = $_POST['ID'];

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if(!empty($_POST)){
    settype($id, "Integer");
    $sql = "SELECT `Budget`, `BudgetFrequency`, `DisplayName` FROM `UserSettings` WHERE `ID` = '$id'";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
    // output data of each row
        while($row = $result->fetch_assoc()) {
            $response["message"] =  "Budget " . $row["Budget"]. " - Frequency " . $row["BudgetFrequency"]. " - Display Name: " . $row["DisplayName"];
            $response["Budget"] = $row["Budget"];
            $response["Frequency"] = $row["BudgetFrequency"];
            $response["DisplayName"] = $row["DisplayName"];
            $response["success"] = 1;
            die(json_encode($response));
        }
    } else {
        $response["message"] = "Returned no results";
        $response["success"] = 0;
        die(json_encode($response));
    }
}else{
    $response["message"] = "No ID provided, error in yer code sam - check that ID is referenced from LoginActivity properly.";
    $response["success"] = 0;
    die(json_encode($response));
}


?>