Java Android使用PHP将视频上传到服务器。错误:向活动传递结果失败
我是初学者。我想上传视频到服务器。一个简单的例子: 我试图在我的项目中使用以下内容: uploadvideo.phpJava Android使用PHP将视频上传到服务器。错误:向活动传递结果失败,java,php,android,video,Java,Php,Android,Video,我是初学者。我想上传视频到服务器。一个简单的例子: 我试图在我的项目中使用以下内容: uploadvideo.php <?php if($_SERVER['REQUEST_METHOD']=='POST'){ $file_name = $_FILES['myFile']['name']; $file_size = $_FILES['myFile']['size']; $file_type = $_FILES['myFile']['t
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
$file_name = $_FILES['myFile']['name'];
$file_size = $_FILES['myFile']['size'];
$file_type = $_FILES['myFile']['type'];
$temp_name = $_FILES['myFile']['tmp_name'];
$location = "http://localhost/android/upload/";
move_uploaded_file($temp_name, $location.$file_name);
echo "http://localhost/android/upload/".$file_name;
}else{
echo "Error";
}
?>
sendvideo.java
public class Sendvideo extends Fragment {
private static final int SELECT_VIDEO = 2;
String selectedPath = "";
private static final String REGISTER_URL = "http://10.0.3.2:90/android/uploadimage.php";
public static final String KEY_NAME= "TEN";
public static final String KEY_IMAGE= "HINH";
LinearLayout ll;
EditText et_sendvideotitle;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ll = (LinearLayout) inflater.inflate(R.layout.sendvideo, container, false);
Button btn_choosevideo = (Button)ll.findViewById(R.id.btn_choosevideo);
Button btn_sendvideo = (Button)ll.findViewById(R.id.btn_sendvideo);
et_sendvideotitle = (EditText) ll.findViewById(R.id.et_sendvideotitle);
EditText et_sendvideodesc = (EditText) ll.findViewById(R.id.et_sendvideodesc);
btn_choosevideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGalleryVideo();
}
});
btn_sendvideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uploadVideo();
}
});
return ll;
}
// *********************************************************************************
public void openGalleryVideo(){
Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"select vid"), SELECT_VIDEO);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_VIDEO && resultCode == Activity.RESULT_OK && data!=null) {
System.out.println("SELECT_VIDEO");
Log.i("data.getDataString() ",data.getDataString());
Uri selectedfile = data.getData();
selectedPath = getPath(selectedfile);
System.out.println("SELECT_VIDEO Path : " + selectedPath);
}
}
public String getPath(Uri uri) {
Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
Log.i("cursor.toString() ",cursor.toString());
cursor.moveToFirst();
String document_id = cursor.getString(0);
document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
cursor.close();
cursor = getActivity().getContentResolver().query(
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
cursor.close();
return path;
}
private void uploadVideo() {
class UploadVideo extends AsyncTask<Void, Void, String> {
ProgressDialog uploading;
@Override
protected void onPreExecute() {
super.onPreExecute();
uploading = ProgressDialog.show(getActivity(), "up", "...", false, false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
uploading.dismiss();
et_sendvideotitle.setText(Html.fromHtml("Uploaded at <a href='" + s + "'>" + s + "</a>"));
et_sendvideotitle.setMovementMethod(LinkMovementMethod.getInstance());
}
@Override
protected String doInBackground(Void... params) {
Upload u = new Upload();
String msg = u.uploadVideo(selectedPath);
return msg;
}
}
UploadVideo uv = new UploadVideo();
uv.execute();
}
}
公共类Sendvideo扩展片段{
私有静态最终整数选择_视频=2;
字符串selectedPath=“”;
专用静态最终字符串寄存器\u URL=”http://10.0.3.2:90/android/uploadimage.php";
公共静态最终字符串键\u NAME=“十”;
公共静态最终字符串键\u IMAGE=“HINH”;
线性布局;
编辑文本和视频标题;
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
ll=(线性布局)充气器。充气(R.layout.sendvideo,容器,假);
按钮btn\u choosevideo=(按钮)ll.findViewById(R.id.btn\u choosevideo);
按钮btn_sendvideo=(按钮)ll.findViewById(R.id.btn_sendvideo);
et_sendvideotitle=(EditText)ll.findViewById(R.id.et_sendvideotitle);
EditText et_sendvideodesc=(EditText)ll.findViewById(R.id.et_sendvideodesc);
btn_choosevideo.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
openGalleryVideo();
}
});
btn_sendvideo.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
上传视频();
}
});
返回ll;
}
// *********************************************************************************
公开作废openGalleryVideo(){
意图=新意图();
intent.setType(“video/*”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(Intent,“选择视频”),选择视频);
}
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
if(requestCode==SELECT_VIDEO&&resultCode==Activity.RESULT_OK&&data!=null){
System.out.println(“选择视频”);
Log.i(“data.getDataString()”,data.getDataString());
Uri selectedfile=data.getData();
selectedPath=getPath(selectedfile);
System.out.println(“选择视频路径:+selectedPath”);
}
}
公共字符串getPath(Uri){
Cursor Cursor=getActivity().getContentResolver().query(uri,null,null,null);
Log.i(“cursor.toString()”,cursor.toString());
cursor.moveToFirst();
String document_id=cursor.getString(0);
document_id=document_id.子字符串(document_id.lastIndexOf(“:”)+1);
cursor.close();
游标=getActivity().getContentResolver().query(
android.provider.MediaStore.Video.Media.EXTERNAL\u CONTENT\u URI,
null,MediaStore.Images.Media.\u ID+“=?”,新字符串[]{document\u ID},null);
cursor.moveToFirst();
字符串路径=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
cursor.close();
返回路径;
}
私有void上传视频(){
类UploadVideo扩展异步任务{
进程对话框上传;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Upload=ProgressDialog.show(getActivity(),“up”,“…”,false,false);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
上传。驳回();
et_sendvideotitle.setText(Html.fromHtml(“上传地址”);
et_sendvideotitle.setMovementMethod(LinkMovementMethod.getInstance());
}
@凌驾
受保护字符串doInBackground(无效…参数){
Upload u=新上传();
字符串msg=u.上传视频(selectedPath);
返回味精;
}
}
UploadVideo uv=新的UploadVideo();
uv.execute();
}
}
错误:
致命异常:主
java.lang.RuntimeException:未能传递结果ResultInfo{who=null,request=65538,result=-1,data=Intent{dat=file:///mnt/sdcard/Download/titraj_176034.mp4 }}到活动{xx.xxx.xxxx.xxxxxx/xx.xxx.xxxx.xxxxx.Drawer}:java.lang.NullPointerException
在线:Cursor Cursor=getContext().getContentResolver().query(uri,null,null,null);
Log.i(“cursor.toString()”,cursor.toString())
请帮帮我 因此,当您使用一个为null的变量时,会出现一个NullPointerException。哪个变量是空的?我通过小视频(小于5MB)和一些扩展(如.3gp.mp4等)对它进行了测试。但是没有成功!传递结果失败,游标为空。如果您无法详细说明发生了什么,我们如何帮助您?请解释您需要光标的原因。在运行中,当我单击btn_choosevideo并在Emulator的下载目录中选择一个视频后,它会停止。在清单中:
它会停止。
。这还不够。更多地解释发生了什么和没有发生什么。你没有回答我的问题。很奇怪。
public class Sendvideo extends Fragment {
private static final int SELECT_VIDEO = 2;
String selectedPath = "";
private static final String REGISTER_URL = "http://10.0.3.2:90/android/uploadimage.php";
public static final String KEY_NAME= "TEN";
public static final String KEY_IMAGE= "HINH";
LinearLayout ll;
EditText et_sendvideotitle;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ll = (LinearLayout) inflater.inflate(R.layout.sendvideo, container, false);
Button btn_choosevideo = (Button)ll.findViewById(R.id.btn_choosevideo);
Button btn_sendvideo = (Button)ll.findViewById(R.id.btn_sendvideo);
et_sendvideotitle = (EditText) ll.findViewById(R.id.et_sendvideotitle);
EditText et_sendvideodesc = (EditText) ll.findViewById(R.id.et_sendvideodesc);
btn_choosevideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGalleryVideo();
}
});
btn_sendvideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uploadVideo();
}
});
return ll;
}
// *********************************************************************************
public void openGalleryVideo(){
Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"select vid"), SELECT_VIDEO);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_VIDEO && resultCode == Activity.RESULT_OK && data!=null) {
System.out.println("SELECT_VIDEO");
Log.i("data.getDataString() ",data.getDataString());
Uri selectedfile = data.getData();
selectedPath = getPath(selectedfile);
System.out.println("SELECT_VIDEO Path : " + selectedPath);
}
}
public String getPath(Uri uri) {
Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
Log.i("cursor.toString() ",cursor.toString());
cursor.moveToFirst();
String document_id = cursor.getString(0);
document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
cursor.close();
cursor = getActivity().getContentResolver().query(
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
cursor.close();
return path;
}
private void uploadVideo() {
class UploadVideo extends AsyncTask<Void, Void, String> {
ProgressDialog uploading;
@Override
protected void onPreExecute() {
super.onPreExecute();
uploading = ProgressDialog.show(getActivity(), "up", "...", false, false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
uploading.dismiss();
et_sendvideotitle.setText(Html.fromHtml("Uploaded at <a href='" + s + "'>" + s + "</a>"));
et_sendvideotitle.setMovementMethod(LinkMovementMethod.getInstance());
}
@Override
protected String doInBackground(Void... params) {
Upload u = new Upload();
String msg = u.uploadVideo(selectedPath);
return msg;
}
}
UploadVideo uv = new UploadVideo();
uv.execute();
}
}