对于此功能,我需要将自定义 ListView 中提到的项目从 Activity1.java
传递回 php,以便从 mysql 检索另一个 Activity 中有关该特定项目的更多信息(包括通过 Picasso 库的图像),以便我知道 php 文件是否正确以及应该如何打开 Activity2.java
。
Activity1.java
public class Activity1 extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView lv= (ListView) findViewById(R.id.listview);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
String name =((TextView) findViewById(R.id.itemname)).getText().toString();
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("NAME", name);
startActivity(intent);
}
});
}
}
Detail.php
<?php
include 'dbConnect.php';
mysqli_set_charset($conn, 'utf8');
$NAME = $_POST['NAME'];
$sql = "SELECT * FROM items WHERE item_name = '$NAME'" ;
result = $conn->query($sql);
if ($result->num_rows >0) {
while($row[] = $result->fetch_assoc()) {
$tem = $row;
$json = json_encode($tem);
}
} else {
echo "No Results Found.";
}
echo $json;
$conn->close();
?>
我建议您使用Retrofit 2 library用于发出 REST 请求,这正是您所需要的。
首先将以下依赖项添加到您的 build.gradle 文件中
dependencies {
// Retrofit & OkHttp
compile 'com.squareup.retrofit2:retrofit:2.3.0'
// JSON Converter
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
}
您需要创建一个界面来描述您的 Retrofit 服务。在你的情况下,它看起来像这样(不要把/放在开头路径):
public interface PhpService {
@FormUrlEncoded
@POST("path/to/your/web/resource")
Call<Item> searchForItem(@Field("NAME") String itemName);
}
您需要创建一个描述您的项目的类(您必须自己编写该类,因为我不知道实际的字段):
class Item {
@SerializedName("name")
String name;
@SerializedName("url")
String imageUrl;
}
现在您需要像这样创建实际服务(将 baseUrl 替换为您的网站):
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://yourwebsite.com/")
.build();
PhpService service = retrofit.create(PhpService.class);
现在,使用创建的服务,您可以向您的 php 网络服务器发出请求:
Call<Item> item = service.searchForItem("yourItemName");
call.enqueue(new Callback<Item>() {
@Override
public void onResponse(Call<Item> call, Response<Item> response) {
if (response.isSuccessful()) {
Itemitem = response.body();
// todo do stuff with your item
}
}
@Override
public void onFailure(Call<Item> call, Throwable t) {
// the network call was a failure
// TODO: handle error
}
});
这应该是从 php 脚本中获取项目的全部内容。
如果您需要更多帮助,请查看此 tutorial by futurestud.io .
我是一名优秀的程序员,十分优秀!