dongquanjie9328 2019-05-23 09:52
浏览 51
已采纳

如何? - 在同一文件执行GET之前,将字符串插入php文件

I have successfully connected my android app to a mysql database and did a read from the database which is displaying all the rows from a table in the app. I want to narrow this down so it only displays the rows which correspond with the users id. I have the usersID stored as a shared preference from when they log into the app. I need my php file to recognise the users id and then use this id as part of the query so it only displays the appropriate rows.I am having trouble trying to set this code up and would benefit from some help. Please see the php and java below.

PHP CODE:

<?php
include('conn.php');

if(isset($_GET['userId'])){//The PHP file doesnt work with these two lines
$getId = $_GET['userId'];

$query = "SELECT * FROM Cbt WHERE userId = '$getId'";
$result = mysqli_query($conn, $query);
$json_array = array();
while ($row = mysqli_fetch_assoc($result)){
$json_array[] =$row;
}
}
echo json_encode($json_array);

JAVA CODE:

  loginPref = getSharedPreferences("loginPref", Context.MODE_PRIVATE);
    final int userId = loginPref.getInt("userId", 0);

    textViewResult = findViewById(R.id.text_viewer_result);
    Gson gson = new GsonBuilder()
            .setLenient()
            .create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
    Api api = retrofit.create(Api.class);
    Call<List<WorkoutLogRecycler>> call = api.getLogs();
    call.enqueue(new Callback<List<WorkoutLogRecycler>>() {
        @Override
        public void onResponse(Call<List<WorkoutLogRecycler>> call,   Response<List<WorkoutLogRecycler>> response) {

            if (!response.isSuccessful()) {
                textViewResult.setText("Code:"+response.code());
                return;
            }

            List<WorkoutLogRecycler> workoutLogRecyclers =  response.body();
            for (WorkoutLogRecycler workoutLogRecycler : workoutLogRecyclers){
                String content ="";
                content += "cbtId: " + workoutLogRecycler.getCbtId() +"
";
                content += "userId: " + workoutLogRecycler.getUserId() +"
";
                content += "moodBefore: " + workoutLogRecycler.getMoodBefore() +"
";
                content += "automaticThought: " + workoutLogRecycler.getAutomaticThought() +"
";
                content += "distortions: " + workoutLogRecycler.getDistortions() +"
";
                content += "challengeTought: " + workoutLogRecycler.getChallengeThought() +"
";
                content += "alternativeThought: " + workoutLogRecycler.getAlternativeThought() +"
";
                content += "moodAfter: " + workoutLogRecycler.getMoodAfter() +"
";
                textViewResult.append(content);
            }
        }


        @Override
        public void onFailure(Call<List<WorkoutLogRecycler>> call,  Throwable t) {
        textViewResult.setText(t.getMessage());
        }
    });

API CODE:

public interface Api {

@FormUrlEncoded
@POST("insert.php")
Call<ResponseBody> insertLog(
        @Field("userId") int userId,
        @Field("moodBefore") int moodBefore,
        @Field("automaticThought") String automaticThought,
        @Field("distortions") int distortions,
        @Field("challengeThought") String challengeThought,
        @Field("alternativeThought") String alternativeThought,
        @Field("moodAfter") int moodAfter
);


@GET("read.php")
Call<List<WorkoutLogRecycler>> getLogs();
  • 写回答

2条回答 默认 最新

  • douwo5710 2019-05-23 10:02
    关注

    Ok so your API url getLogs() needs a parameter that will be passed to the php script

    @GET("read.php")
    Call<List<WorkoutLogRecycler>> getLogs(@Query("userId") String userId);
    

    and then change the line

    Call<List<WorkoutLogRecycler>> call = api.getLogs();
    // to
    Call<List<WorkoutLogRecycler>> call = api.getLogs(userId);
    

    Check if it works. Basically you execute a request that is provided in the .baseUrl() but you don't attach any param to it. When you use GET on the server side, the url should contain some data attached. Like: https://www.api.com?userId=2.

    Then $_GET['userId'] can extract userId value from the url.

    Retrofit attach params for you using @Query adnotation.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料