- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试更改我的应用程序中的个人资料图片和封面图片。我的代码中一切都很好,除了我的封面和个人资料图片没有改变。
这是我的代码文件附件。
在我的应用程序中,我可以进入图库,但在选择图像后,它不会使用“OnActivityResult”覆盖方法。虽然它停留在 ProfileFragment Activity 上,但不会转到 OnActivityResult 方法。在 ProfileFragment 中,它永远不会转到“OnActivityResult”方法。 RESULT_OK 始终为 -1。
这是我的 ProfileActivity.java
public class ProfileActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
FirebaseAuth firebaseAuth;
private TextView welcomeUserTv;
ActionBar actionBar;
ExpandableListAdapter expandableListAdapter;
ExpandableListView expandableListView;
List<MenuModel> headerList = new ArrayList<>();
HashMap<MenuModel, List<MenuModel>> childList = new HashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
Toolbar mtoolbar_3p = findViewById(R.id.toolbar_3p);
setSupportActionBar(mtoolbar_3p);
expandableListView = findViewById(R.id.expNav_3p);
DrawerLayout drawer_3p = findViewById(R.id.drawer_layout_3p);
ActionBarDrawerToggle toggle_3p = new ActionBarDrawerToggle(
this, drawer_3p, mtoolbar_3p, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
if (drawer_3p != null) {
drawer_3p.addDrawerListener(toggle_3p);
}
toggle_3p.syncState();
NavigationView navigationView = findViewById(R.id.navView_3p);
if (navigationView != null) {
navigationView.setNavigationItemSelectedListener(this);
}
firebaseAuth = FirebaseAuth.getInstance();
checkUserStatus();
//Bottom Navigation
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav);
bottomNavigationView.setOnNavigationItemSelectedListener(selectedListener);
//Home fragment transaction, Default on Startup
FirebaseUser user = firebaseAuth.getCurrentUser();
ProfileFragment profileFragment = new ProfileFragment();
FragmentTransaction pft1 = getSupportFragmentManager().beginTransaction();
pft1.replace(R.id.content_frameLayout_inProfile, profileFragment, "");
pft1.commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener selectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
//FirebaseUser user = firebaseAuth.getCurrentUser();
switch(item.getItemId()) {
case (R.id.bottom_home):
//Home Fragment Transaction
//actionBar.setTitle("Home");
/*final View addView = getLayoutInflater().inflate(R.layout.nav_header_profile, null);
//set up for model selection
TextView modelTextview = addView.findViewById(R.id.welcomeUser);
modelTextview.setText(user.getEmail());*/
HomeFragment homeFragment = new HomeFragment();
FragmentTransaction hft1 = getSupportFragmentManager().beginTransaction();
hft1.replace(R.id.content_frameLayout_inProfile, homeFragment, "");
hft1.commit();
return true;
case (R.id.bottom_profile):
//Profile Fragment Transaction
//actionBar.setTitle("Profile");
ProfileFragment profileFragment = new ProfileFragment();
FragmentTransaction pft1 = getSupportFragmentManager().beginTransaction();
pft1.replace(R.id.content_frameLayout_inProfile, profileFragment, "");
pft1.commit();
return true;
case (R.id.bottom_mylist):
//MyList Fragment transaction
//actionBar.setTitle("My List");
MyListFragment mylistFragment = new MyListFragment();
FragmentTransaction mlft1 = getSupportFragmentManager().beginTransaction();
mlft1.replace(R.id.content_frameLayout_inProfile, mylistFragment, "");
mlft1.commit();
return true;
}
return false;
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_logout,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == R.id.action_logout) {
Toast.makeText(this, "You've been logged out", Toast.LENGTH_SHORT).show();
firebaseAuth.signOut();
checkUserStatus();
return true;
}
return super.onOptionsItemSelected(item);
}
private void checkUserStatus() {
FirebaseUser user = firebaseAuth.getCurrentUser();
if(user != null) {
//mProfileTv.setText(user.getEmail());
//Toast.makeText(this, "Your Profile", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Not Your Profile", Toast.LENGTH_SHORT).show();
startActivity(new Intent(ProfileActivity.this, MainActivity.class));
finish();
}
}
@Override
protected void onStart() {
checkUserStatus();
super.onStart();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
DrawerLayout drawer = findViewById(R.id.drawer_layout_3p);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
这是我的 ProfileFragment.java 代码
public class ProfileFragment extends Fragment {
//Firebase auth
FirebaseAuth firebaseAuth;
FirebaseUser user;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
//Firebase storage
StorageReference storageReference;
//path where images of user profile and cover will be stored
String storagePath = "Users_Profile_Cover_Imgs/";
//Views from xml
ImageView mavatarTv, mcoverPic;
TextView mnameTv, memailTv, mphoneTv;
FloatingActionButton mfab;
//Progress Dialog
ProgressDialog pd;
//Permissions constant
private static final int CAMERA_REQUEST_CODE = 100;
private static final int STORAGE_REQUEST_CODE = 200;
private static final int IMAGE_PICK_GALLERY_CODE = 300;
private static final int IMAGE_PICK_CAMERA_CODE = 400;
//Arrays of permission to be required
String cameraPermission[];
String storagePermission[];
//uri of picked image
Uri image_uri;
String profileOrCoverPhoto;
public ProfileFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_profile, container, false);
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("Users");
storageReference = getInstance().getReference();
//init arrays of permission
cameraPermission = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
storagePermission = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
//init views
mavatarTv = view.findViewById(R.id.avatarTv);
mcoverPic = view.findViewById(R.id.coverPic);
memailTv = view.findViewById(R.id.emailTv);
mphoneTv = view.findViewById(R.id.phoneTv);
mnameTv = view.findViewById(R.id.nameTv);
mfab = view.findViewById(R.id.fab);
//init progress dialog
pd = new ProgressDialog(getActivity());
Query query = databaseReference.orderByChild("email").equalTo(user.getEmail());
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//check until required data get
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ""+ ds.child("name").getValue();
String email = ""+ ds.child("email").getValue();
String phone = ""+ ds.child("phone").getValue();
String image = ""+ ds.child("image").getValue();
String cover = ""+ ds.child("cover").getValue();
//set data
mnameTv.setText(name);
memailTv.setText(email);
mphoneTv.setText(phone);
try {
//If image is received then
Picasso.get().load(image).into(mavatarTv);
} catch (Exception e) {
Picasso.get().load(R.drawable.ic_default_img_white).into(mavatarTv);
}
try {
//If image is received then
Picasso.get().load(cover).into(mcoverPic);
} catch (Exception e) {
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//Fab button click
mfab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showEditProfileDialog();
}
});
return view;
}
private boolean checkStoragePermission() {
//Check if storage permission is enabled or not
//return true if enabled else false
boolean result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.WRITE_EXTERNAL_STORAGE)
== (PackageManager.PERMISSION_GRANTED);
return result;
}
private void requestStoragePermission() {
//request runtime storage permission
requestPermissions(storagePermission, STORAGE_REQUEST_CODE);
}
private boolean checkCameraPermission() {
//Check if storage permission is enabled or not
//return true if enabled else false
boolean result1 = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.CAMERA)
== (PackageManager.PERMISSION_GRANTED);
boolean result2 = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.WRITE_EXTERNAL_STORAGE)
== (PackageManager.PERMISSION_GRANTED);
return result1 && result2;
}
private void requestCameraPermission() {
//request runtime storage permission
requestPermissions(cameraPermission, CAMERA_REQUEST_CODE);
}
private void showEditProfileDialog() {
//Show Dialog containing options: 1.Edit ProfilePic, 2. Edit cover, 3. Edit name, 4. Edit Phone
//Options to show in dialog
String[] options = {"Edit Profile Picture", "Edit Cover Picture", "Edit Name", "Edit Phone Number"};
//alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//set title
builder.setTitle("Choose Action");
//set items to dialog
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == 0) {
//Edit Profile pic
pd.setMessage("Updating Profile picture");
profileOrCoverPhoto = "image"; //i.e, changing profile pic, make sure to assign same value
showImagePicDialog();
}
else if (which == 1) {
//Edit cover pic
pd.setMessage("Updating Cover Picture");
profileOrCoverPhoto = "cover"; //i.e, changing profile pic, make sure to assign same value
showImagePicDialog();
}
else if (which == 2) {
//Edit name pic
pd.setMessage("Updating Name");
showNamePhoneUpdateDialog("name");
}
else if (which == 3) {
//Edit phone pic
pd.setMessage("Updating Phone number ");
showNamePhoneUpdateDialog("phone");
}
}
});
//create n show dialog
builder.create().show();
}
private void showNamePhoneUpdateDialog(final String key) {
//
//Custom dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Update "+key);
//set layout of dialog
LinearLayout linearLayout = new LinearLayout(getActivity());
linearLayout.setOrientation(LinearLayout.VERTICAL);
//add edit text
final EditText editText = new EditText(getActivity());
editText.setHint("Enter "+key);
linearLayout.addView(editText);
builder.setView(linearLayout);
//Adding buttons to update
builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String value = editText.getText().toString().trim();
//validate
if (!TextUtils.isEmpty(value)) {
pd.show();
HashMap<String, Object> result = new HashMap<>();
result.put(key, value);
databaseReference.child(user.getUid()).updateChildren(result)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
pd.dismiss();
Toast.makeText(getActivity(), "Updated...", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
pd.dismiss();
Toast.makeText(getActivity(), ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(getActivity(), "Please enter "+key, Toast.LENGTH_SHORT).show();
}
}
});
//Adding buttons to cancel
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
private void showImagePicDialog() {
//Show dialog containing options camera and gallery to pic the image
//Options to show in dialog
String[] options = {"Camera", "Gallery"};
//alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//set title
builder.setTitle("Pick Image From");
//set items to dialog
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == 0) {
//Camera clicked (Permission required)
if (!checkCameraPermission()) {
requestCameraPermission();
} else {
pickFromCamera();
}
}
else if (which == 1) {
//Gallery clicked (Permission required)
if (!checkStoragePermission()) {
requestStoragePermission();
} else {
pickFromGallery();
}
}
}
});
//create n show dialog
builder.create().show();
}
//First check firebase storage rules
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//This method called when user press allow or deny from permission request dialog
//here we'll handle permission cases
switch (requestCode) {
case CAMERA_REQUEST_CODE: {
//picking from camera, 1st check camera n storage permission allowed or not
if (grantResults.length > 0) {
boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean writeStorageAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (cameraAccepted && writeStorageAccepted) {
//Permission enabled
pickFromCamera();
}
else {
//Permission denied
Toast.makeText(getActivity(), "Please enable Camera & Storage permission", Toast.LENGTH_SHORT).show();
}
}
}
break;
case STORAGE_REQUEST_CODE: {
//picking from gallery, 1st check storage permission allowed or not
if (grantResults.length > 0) {
boolean writeStorageAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (writeStorageAccepted) {
//Permission enabled
Toast.makeText(getActivity(), "req code:"+requestCode, Toast.LENGTH_SHORT).show();
System.out.println("req code:"+requestCode);
pickFromGallery();
}
else {
//Permission denied
Toast.makeText(getActivity(), "Please enable Storage permission", Toast.LENGTH_SHORT).show();
}
}
}
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == RESULT_OK ) {
Toast.makeText(getActivity(), "OnActivityResult method", Toast.LENGTH_SHORT).show();
if (requestCode == IMAGE_PICK_GALLERY_CODE) {
//image is picked from gallery, get uri of image
image_uri = data.getData();
Toast.makeText(getActivity(), "Gallery Pic Selected", Toast.LENGTH_SHORT).show();
uploadProfileCoverPhoto(image_uri);
}
/*if (requestCode == IMAGE_PICK_CAMERA_CODE) {
//image is picked from gallery, get uri of image
image_uri = data.getData();
uploadProfileCoverPhoto(image_uri);
}*/
}
super.onActivityResult(requestCode, resultCode, data);
}
private void uploadProfileCoverPhoto(Uri uri) {
pd.show();
String filePathNName = storagePath+ ""+ profileOrCoverPhoto+ ""+ user.getUid();
StorageReference storageReference2nd = storageReference.child(filePathNName);
storageReference2nd.putFile(uri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//image is uploaded to storage, now gets its url and store in usrs database
Task<Uri> uriTask = taskSnapshot.getStorage().getDownloadUrl();
while (!uriTask.isSuccessful());
Uri downloadUri = uriTask.getResult();
//check if image is uploaded or not and url is received
if(uriTask.isSuccessful()) {
//image uploaded, so add/update url in users db
HashMap<String, Object> results = new HashMap<>();
results.put(profileOrCoverPhoto, downloadUri.toString());
databaseReference.child(user.getUid()).updateChildren(results)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
pd.dismiss(); //image url in db of user added
Toast.makeText(getActivity(), "Image Updated...", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
pd.dismiss();
Toast.makeText(getActivity(), "Error updating image", Toast.LENGTH_SHORT).show();
}
});
} else {
pd.dismiss();
Toast.makeText(getActivity(), "Some error occurred", Toast.LENGTH_SHORT).show();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
pd.dismiss();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private void pickFromCamera() {
//intent of picking image from device camera
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "Temp Pic");
values.put(MediaStore.Images.Media.DESCRIPTION, "Temp Description");
//put image uri
image_uri = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//Intent to start camera
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
startActivityForResult(cameraIntent, IMAGE_PICK_CAMERA_CODE);
}
private void pickFromGallery() {
//pick from gallery
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
//Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, IMAGE_PICK_GALLERY_CODE);
Toast.makeText(getActivity(), "Gallery Image", Toast.LENGTH_SHORT).show();
System.out.println("Hello Gallery: "+getTargetRequestCode()+" result_ok:"+RESULT_OK);
//Intent intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI);
//getParent().startActivityForResult(intent, GALLERY);
}
}
所有导入均正确。
这是我的 list 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.shortlisted">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".LoginActivity"></activity>
<activity android:name=".ProfileActivity"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".RegisterActivity" />
<activity android:name=".InfoActivity" />
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
</activity>
</application>
</manifest>
最佳答案
尝试重写ProfileActivity中的onActivityResult方法。
首先会调用 ProfileActivity 的 onActivityResult 方法。因此,当您重写 ProfileActivity 中的方法时,它会调用 super(),而 super() 又会为相应的 fragment 提供结果。
希望对您有帮助!
关于java - 在我的应用程序中,我可以进入图库,但在选择图像后,它不会覆盖 "OnActivityResult"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62232716/
如果我 mov, eax 12345 和之后的 mov var, eax (假设 var 是一个 32 位的 int 等..等等)并输出 var 稍后它会正确输出。 与 ax 相同。 mov ax,
我有这个代码: for($nrt=0; $nrt"; if($sidesIndexes[$nrt]==$nrt) { echo "am I in??? ".$sidesInde
我正在阅读The Go Programming Language的8.5章,并陷入一些代码。下面的代码列表。 func main() { naturals := make(chan int)
我写了一个 MySQL 查询用于将数据导出到文本文件。 查询运行成功,但结果与我的预期不符。 我想在列之间没有间距的结果。 select sample_export_record1_2013.
在普通的 Excel 窗口中,我可以打开 VBE 并通过触摸键序列插入一个新模块:ALT+F11、ALTim 全部不使用鼠标。有没有办法打开 VBE 并导航到 本工作手册 不使用鼠标的代码区域? 最佳
我正在使用 axios 发出 http 请求。在 .then() 内部,我正在使用另一个 axios 调用。最后,我有第三个 then(),它应该在第二个 then 之后运行,但实际上并没有这样做。
我需要在 cocos2d 项目中播放视频..我的问题是:如何将 MPMoviePlayerController 放入我的 View 中,如下所示:? UIView *theView = [[CCDir
我正在学习 Angular。以下代码有效: .controller('abc', function ($scope, $http) { $http.get("/Handlers/Authenticat
目前我正在使用 WPF 学习 C#。我的主要方法是尽我所能使用 MVVM 模式,但现在我有点困惑。 在我所有 View 的应用程序中,我有一个 View 模型: private DruckviewVi
关于将 G 邮件提取到 Google 电子表格,我该如何添加 IF 以按主题驳回特定电子邮件?例如:电子邮件回复(主题中带有“RE:”)。我不希望这些电子邮件出现在我的电子表格中。 我尝试过使用 LO
我正在尝试使用 Spotify API 并进入数组。 const App = () => { const [isLoading, setIsLoading] = useState(true);
我有一个 html 模板,并且有一个条件为 --> 的代码 --> window.jQuery || document.write(""+"");
我正在开发一个 Android 应用程序,该应用程序会暴力破解从 int 创建的 MD5 和。 暴力破解部分工作正常。 (我可以sysout最终值并且它是正确的。) 我在将输出值发送到警报对话框时遇到
我正在创建一个界面,用户可以通过该界面生成多系列折线图,并控制绘制哪些数据集。 要绘制哪些数据集由复选框控制。页面加载时,默认数据集以图表形式呈现,并且 $('input:checkbox.data-
我尝试将有向无环图绘制为力布局。 但是我注意到,尽管为每个组元素灌输了进入/退出条件,弹出的节点/链接并没有从 DOM 中删除它们自己。 相反,弹出的节点/链接在力布局中卡住;这意味着没有调用进入/退
这里是新手。我不知道它是怎么发生的,但我正在处理一个程序,当我去调试并进入时,黄色箭头走到了我代码的最后并跳过了整个 block 。有快速解决方法吗? 最佳答案 按 F11,或单击工具栏上的“Step
我的 Action 栏 sherlock 中有一个列表。我想在用户点击该列表时得到。我不想知道用户何时点击某个项目,我已经知道 (onNavigationItemSelected)。 在我的 onCr
** 你好 **我如何从 ci 中的 mysql 日期获取 eurodate 来工作......无法弄清楚 - 请帮忙 想要获取日期 YY-mm- dd -> dd-mm-yy提前致谢 最佳答案 $t
我有以下脚本: #!/bin/bash ls -1 | while read d do [[ -f "$d" ]] && continue echo $d cd $d done
TL;DR - 跳转到最后一段 背景 我正在执行一些数据驱动测试,并将日志文件用作测试输出之一。它的工作原理是这样的- 读取文件夹中的第一个文件 处理第一行并转换为测试 运行测试 执行验证 1 ...
我是一名优秀的程序员,十分优秀!